﻿using CJAtech.BBS.DataEntity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TjZheng.Framework;

namespace TjZheng.CMS.Process.Business
{
    public static class CategoryInfoExtension
    {
        public static TreeEntity ConvertToTree(this List<CategoryInfo> objLogCategoryList, long rootId)
        {
            TreeEntity objTreeEntity = null;
            if (objLogCategoryList.IsNull())
            {
                return objTreeEntity;
            }
            var objRoot = objLogCategoryList.FirstOrDefault(c => c.CategoryId == rootId);
            if (objRoot == null)
            {
                return objTreeEntity;
            }
            objTreeEntity = new TreeEntity();
            objTreeEntity.id = objRoot.CategoryId;
            objTreeEntity.text = objRoot.CategoryName;
            objTreeEntity.iconCls = "icon-application";
            objTreeEntity.Data = objRoot;
            if (objRoot.HasChild == 1)
            {
                var objChildren = objLogCategoryList.Where(c => c.ParentId == objRoot.CategoryId).ToList();
                if (objChildren.IsNoNull())
                {
                    TreeEntity objChildTreeEntity = null;
                    foreach (var objChild in objChildren)
                    {
                        objChildTreeEntity = ConvertToTree(objLogCategoryList, objChild.CategoryId);
                        if (objChildTreeEntity != null)
                        {
                            objTreeEntity.children.Add(objChildTreeEntity);
                        }
                    }
                }
            }
            return objTreeEntity;
        }
        public static List<TreeEntity> ConvertToTreeList(this List<CategoryInfo> objLogCategoryList, long rootId)
        {
            List<TreeEntity> objTreeEntityList = null;
            if (objLogCategoryList.IsNull())
            {
                return objTreeEntityList;
            }
            var objRoots = objLogCategoryList.Where(c => c.CategoryId == rootId).ToList();
            if (objRoots.IsNull())
            {
                return objTreeEntityList;
            }
            objTreeEntityList = new List<TreeEntity>();
            TreeEntity objRootTreeEntity = null;
            foreach (var objRoot in objRoots)
            {
                objRootTreeEntity = ConvertToTree(objLogCategoryList, objRoot.CategoryId);
                if (objRootTreeEntity != null)
                {
                    objTreeEntityList.Add(objRootTreeEntity);
                }
            }
            return objTreeEntityList;
        }
        public static List<TreeEntity> ConvertToTreeListExceptRoot(this List<CategoryInfo> objLogCategoryExceptRoot, long rootId)
        {
            List<TreeEntity> objTreeEntityList = null;
            if (objLogCategoryExceptRoot.IsNull())
            {
                return objTreeEntityList;
            }
            var objChildren = objLogCategoryExceptRoot.Where(c => c.ParentId == rootId).ToList();
            if (objChildren.IsNull())
            {
                return objTreeEntityList;
            }
            objTreeEntityList = new List<TreeEntity>();
            TreeEntity objChildTreeEntity = null;
            foreach (var objChild in objChildren)
            {
                objChildTreeEntity = ConvertToTree(objLogCategoryExceptRoot, objChild.CategoryId);
                if (objChildTreeEntity != null)
                {
                    objTreeEntityList.Add(objChildTreeEntity);
                }
            }
            return objTreeEntityList;
        }
    }
}
